iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
自我挑戰組

ASP.NET MVC5從入門到退坑系列 第 19

[Day19]模型繫結

  • 分享至 

  • xImage
  •  

今天來談談由後端取得前端所送出資料的方法


最簡單的模型繫結

這個方式相信只要有開發過網頁用的表單一定都會知道的方法,無論是PHP、JSP或ASP
沒錯就是使用Request.Form

//Controller
public ActionResult test(string content)
        {
            ViewBag.content = content;
            return View();
        }
        
//View
@using (Html.BeginForm())
{
    @Html.Label("輸入訊息")
    <input type="text" name="content"/>
    <button class="btn btn-danger">送出</button>
}
<p>輸入的訊息為:@ViewBag.content</p>

這個方法就是透過表單的Name屬性與後端接收參數名稱相同的方式做繫結
不過差異在MVC表單使用Razor的方式產生,當然也是可以使用HTML的Form標籤

FormCollection

顧名思義會取得由前端所傳來的表單集合,如果表單欄位很多,使用這個方式會比第一種方式方便

//Controller
public ActionResult test(FormCollection formCollection)
        {
            ViewBag.content = formCollection["content"];
            return View();
        }
//View
@using (Html.BeginForm())
{
    @Html.Label("輸入訊息")
    <input type="text" name="content"/>
    <button class="btn btn-danger">送出</button>
}
<p>輸入的訊息為:@ViewBag.content</p>

這個方式的重點在於後端也就是Controller使用FormCollection集合接收表單的"所有資料"
也就是不管你要不要傳遞到後端全部都會傳,所以在使用上要特別注意

DefaultModelBinder

這個是屬於比較複雜的模型繫結,這種模型通常是有多個自訂的屬性類別

//在Models建立一個模型類別
public class modelTest
    {
        public string Name { get; set; }
        public string Id { get; set; }
    }
//在Controller利用此模型的型別接收表單資料
 public ActionResult test(modelTest form)
        {
            ViewBag.Name = form.Name;
            ViewBag.Id = form.Id;
            return View();
        }
//在View的表單欄位名稱要跟模型的屬性名稱相同
@using (Html.BeginForm())
{
    @Html.Label("輸入名稱")
    <input type="text" name="Name" />
    @Html.Label("輸入Id")
    <input type="text" name="Id" />
    <button class="btn btn-danger">送出</button>
}
<p>輸入的名稱為:@ViewBag.Name</p>
<p>輸入的Id為:@ViewBag.Id</p>

上一篇
[Day18]ViewData|ViewBag|TempData
下一篇
[Day20]Action過濾器
系列文
ASP.NET MVC5從入門到退坑30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言